#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define MaxSize 10

typedef struct
{
    /* data */
    int data[MaxSize];
    int length;
} SqList;

void InitList(SqList &L)
{
    for (int i = 0; i < MaxSize; i++)
    {
        L.data[i] = 0; // 将所有数据元素设置为默认初始值
    }
    L.length = 0; // 顺序表初始长度为0
}

bool ListInsert(SqList &L, int i, int e)
{
    if (i < 1 || i > L.length + 1)
    {
        return false;
    }
    if (L.length >= MaxSize)
    {
        return false;
    }

    for (int j = L.length; j >= i; j--)
    {
        L.data[j] = L.data[j - 1];
    }
    L.data[i - 1] = e;
    L.length++;
    return true;
}

bool ListDelete(SqList &L, int i, int &e)
{
    if (i < 1 || i > L.length)
    {
        return false;
    }
    e = L.data[i - 1];
    for (int j = i; j < L.length; j++)
    {
        L.data[j - 1] = L.data[j];
    }
    L.length--;
    return true;
}

int main()
{
    SetConsoleOutputCP(65001);
    SqList L;
    int e;
    InitList(L);
    ListInsert(L, 1, 1);
    ListInsert(L, 2, 2);
    ListInsert(L, 3, 3);
    printf("原线性表中的元素：\n");
    for (int i = 0; i < L.length; i++)
    {
        printf("%d ", L.data[i]);
    }
    if (ListDelete(L, 3, e))
    {
        printf("\n删除成功，删除的元素为：%d\n", e);
    }
    printf("删除后线性表中的元素：\n");
    for (int i = 0; i < L.length; i++)
    {
        printf("%d ", L.data[i]);
    }
    return 0;
}